package br.com.travesso.util;

import java.text.ParseException;

import javax.swing.text.MaskFormatter;

public class FormatadorUtil {

	public static String formatarCpf(String cpf) {
		cpf = formatarZerosEsquerda(cpf, 11);

		String cpfRetorno = cpf.substring(0, 3) + "." + cpf.substring(3, 6)
				+ "." + cpf.substring(6, 9) + "-" + cpf.substring(9);
		return cpfRetorno;
	}

	private static String formatarZerosEsquerda(String num, int tamanho) {
		if (num == null) {
			return null;
		}
		return formatarZerosEsquerda(Long.valueOf(num), tamanho);
	}

	/**
	 * Formata um número deixando apenas algarismos no intervalo de [0..9]
	 * completando o número com zeros à esquerda até atingir o tamanho passado
	 * por argumento.
	 * 
	 * @param num
	 * @param tamanho
	 * @return
	 */
	private static String formatarZerosEsquerda(Long num, int tamanho) {
		return String.format("%0" + tamanho + "d", num);
	}

	/**
	 * Formatar número de telefone com 10 ou 11 dígitos.
	 * 
	 * @param telefone
	 * @return telefone formatado
	 */
	public static String formatarTelefone(String telefone) {
		if (telefone == null)
			return null;

		MaskFormatter mask;
		try {
			if (telefone.length() == 10)
				mask = new MaskFormatter("(##) ####-####");
			else if (telefone.length() == 11)
				mask = new MaskFormatter("(##) ####-#####");
			else
				return telefone;
			mask.setValueContainsLiteralCharacters(false);
			return mask.valueToString(telefone);
		} catch (ParseException e) {
			e.printStackTrace();
			return telefone;
		}
	}

	/**
	 * Formatar CEP.
	 * 
	 * @param cep
	 * @return cep formatado.
	 */
	public static String formatarCEP(String cep) {
		if (cep == null || cep.length() != 8)
			return cep;

		MaskFormatter mask;
		try {
			mask = new MaskFormatter("#####-###");
			mask.setValueContainsLiteralCharacters(false);
			return mask.valueToString(cep);
		} catch (ParseException e) {
			e.printStackTrace();
			return cep;
		}
	}

}
